package com.sokal.easycare.modules.payment.entity;

import org.hibernate.validator.constraints.Length;
import java.util.Date;
import java.util.Map;

import com.fasterxml.jackson.annotation.JsonFormat;

import com.sokal.easycare.common.persistence.DataEntity;

/**
 * 微信回调Entity
 * @author nibo
 * @version 2017-05-23
 */
public class OrderWeixinpayCallbackRecord extends DataEntity<OrderWeixinpayCallbackRecord> {
	
	private static final long serialVersionUID = 1L;
	private String orderno;		// 商户系统唯一订单号
	private String returncode;		// 返回状态码,SUCCESS/FAIL 此字段是通信标识，非交易标识，交易是否成功需要查看result_code来判断
	private String returnMsg;		// 返回信息
	private String appid;		// 公众账号ID,微信分配的公众账号ID（企业号corpid即为此appId）
	private String partnerno;		// 商户编号，微信支付分配的商户号
	private String deviceinfo;		// 设备号,微信支付分配的终端设备号
	private String noncestr;		// 随机字符串，不长于32位
	private String sign;		// 签名,用于验证回调请求参数是否被篡改过
	private String resultcode;		// 业务结果,SUCCESS/FAIL
	private String errcode;		// 错误代码,错误返回的信息描述
	private String errcodedes;		// 错误代码描述,错误返回的信息描述
	private String openid;		// 用户标识,用户在商户appid下的唯一标识
	private String issubscribe;		// 是否关注公众账号,用户是否关注公众账号，Y-关注，N-未关注，仅在公众账号类型支付有效
	private String tradetype;		// 交易类型,JSAPI、NATIVE、APP
	private String banktype;		// 付款银行,银行类型，采用字符串类型的银行标识
	private String totalfee;		// 订单总金额，单位为分
	private String feetype;		// 货币种类,货币类型，符合ISO4217标准的三位字母代码，默认人民币：CNY
	private String cashfee;		// 现金支付金额,订单现金支付金额
	private String cashfeetype;		// 现金支付货币类型,符合ISO4217标准的三位字母代码，默认人民币：CNY
	private String couponfee;		// 代金券或立减优惠金额, 代金券或立减优惠金额&lt;=订单总金额，订单总金额-代金券或立减优惠金额=现金支付金额
	private String couponcount;		// 代金券或立减优惠使用数量
	private String tradeno;		// 微信支付订单号
	private String attach;		// 商家数据包，原样返回
	private String timeend;		// 支付完成时间，格式为yyyyMMddHHmmss
	private Date createtime;		// 创建时间
	private String bizsystemcode;		// 支付渠道号
	
	public OrderWeixinpayCallbackRecord(Map<String, Object> callBackMap){
		this.orderno = (String) callBackMap.get("out_trade_no");
		this.returncode = (String) callBackMap.get("return_code");
		this.returnMsg = (String) callBackMap.get("return_msg");
		this.appid = (String) callBackMap.get("appid");
		this.partnerno = (String) callBackMap.get("mch_id");
		this.deviceinfo = (String) callBackMap.get("device_info");
		this.noncestr = (String) callBackMap.get("nonce_str");
		this.sign = (String) callBackMap.get("sign");
		this.resultcode = (String) callBackMap.get("result_code");
		this.errcode = (String) callBackMap.get("err_code");
		this.errcodedes = (String) callBackMap.get("err_code_des");
		this.openid = (String) callBackMap.get("openid");
		this.issubscribe = (String) callBackMap.get("is_subscribe");
		this.tradetype = (String) callBackMap.get("trade_type");
		this.banktype = (String) callBackMap.get("bank_type");
		this.totalfee = (String) callBackMap.get("total_fee");
		this.feetype = (String) callBackMap.get("fee_type");
		this.cashfee = (String) callBackMap.get("cash_fee");
		this.cashfeetype = (String) callBackMap.get("cash_fee_type");
		this.couponfee = (String) callBackMap.get("coupon_fee");
		this.couponcount = (String) callBackMap.get("coupon_count");
		this.tradeno = (String) callBackMap.get("transaction_id");
		this.attach = (String) callBackMap.get("attach");
		this.timeend = (String) callBackMap.get("time_end");
		this.bizsystemcode = (String) callBackMap.get("attach");
		this.createtime = new Date();
	}
	
	public OrderWeixinpayCallbackRecord() {
		super();
	}

	public OrderWeixinpayCallbackRecord(String id){
		super(id);
	}

	@Length(min=1, max=32, message="商户系统唯一订单号长度必须介于 1 和 32 之间")
	public String getOrderno() {
		return orderno;
	}

	public void setOrderno(String orderno) {
		this.orderno = orderno;
	}
	
	@Length(min=0, max=128, message="返回状态码,SUCCESS/FAIL 此字段是通信标识，非交易标识，交易是否成功需要查看result_code来判断长度必须介于 0 和 128 之间")
	public String getReturncode() {
		return returncode;
	}

	public void setReturncode(String returncode) {
		this.returncode = returncode;
	}
	
	@Length(min=0, max=128, message="返回信息长度必须介于 0 和 128 之间")
	public String getReturnMsg() {
		return returnMsg;
	}

	public void setReturnMsg(String returnMsg) {
		this.returnMsg = returnMsg;
	}
	
	@Length(min=0, max=128, message="公众账号ID,微信分配的公众账号ID（企业号corpid即为此appId）长度必须介于 0 和 128 之间")
	public String getAppid() {
		return appid;
	}

	public void setAppid(String appid) {
		this.appid = appid;
	}
	
	@Length(min=0, max=128, message="商户编号，微信支付分配的商户号长度必须介于 0 和 128 之间")
	public String getPartnerno() {
		return partnerno;
	}

	public void setPartnerno(String partnerno) {
		this.partnerno = partnerno;
	}
	
	@Length(min=0, max=128, message="设备号,微信支付分配的终端设备号长度必须介于 0 和 128 之间")
	public String getDeviceinfo() {
		return deviceinfo;
	}

	public void setDeviceinfo(String deviceinfo) {
		this.deviceinfo = deviceinfo;
	}
	
	@Length(min=0, max=128, message="随机字符串，不长于32位长度必须介于 0 和 128 之间")
	public String getNoncestr() {
		return noncestr;
	}

	public void setNoncestr(String noncestr) {
		this.noncestr = noncestr;
	}
	
	@Length(min=0, max=512, message="签名,用于验证回调请求参数是否被篡改过长度必须介于 0 和 512 之间")
	public String getSign() {
		return sign;
	}

	public void setSign(String sign) {
		this.sign = sign;
	}
	
	@Length(min=0, max=128, message="业务结果,SUCCESS/FAIL长度必须介于 0 和 128 之间")
	public String getResultcode() {
		return resultcode;
	}

	public void setResultcode(String resultcode) {
		this.resultcode = resultcode;
	}
	
	@Length(min=0, max=128, message="错误代码,错误返回的信息描述长度必须介于 0 和 128 之间")
	public String getErrcode() {
		return errcode;
	}

	public void setErrcode(String errcode) {
		this.errcode = errcode;
	}
	
	@Length(min=0, max=128, message="错误代码描述,错误返回的信息描述长度必须介于 0 和 128 之间")
	public String getErrcodedes() {
		return errcodedes;
	}

	public void setErrcodedes(String errcodedes) {
		this.errcodedes = errcodedes;
	}
	
	@Length(min=0, max=128, message="用户标识,用户在商户appid下的唯一标识长度必须介于 0 和 128 之间")
	public String getOpenid() {
		return openid;
	}

	public void setOpenid(String openid) {
		this.openid = openid;
	}
	
	@Length(min=0, max=128, message="是否关注公众账号,用户是否关注公众账号，Y-关注，N-未关注，仅在公众账号类型支付有效长度必须介于 0 和 128 之间")
	public String getIssubscribe() {
		return issubscribe;
	}

	public void setIssubscribe(String issubscribe) {
		this.issubscribe = issubscribe;
	}
	
	@Length(min=0, max=128, message="交易类型,JSAPI、NATIVE、APP长度必须介于 0 和 128 之间")
	public String getTradetype() {
		return tradetype;
	}

	public void setTradetype(String tradetype) {
		this.tradetype = tradetype;
	}
	
	@Length(min=0, max=128, message="付款银行,银行类型，采用字符串类型的银行标识长度必须介于 0 和 128 之间")
	public String getBanktype() {
		return banktype;
	}

	public void setBanktype(String banktype) {
		this.banktype = banktype;
	}
	
	@Length(min=0, max=128, message="订单总金额，单位为分长度必须介于 0 和 128 之间")
	public String getTotalfee() {
		return totalfee;
	}

	public void setTotalfee(String totalfee) {
		this.totalfee = totalfee;
	}
	
	@Length(min=0, max=128, message="货币种类,货币类型，符合ISO4217标准的三位字母代码，默认人民币：CNY长度必须介于 0 和 128 之间")
	public String getFeetype() {
		return feetype;
	}

	public void setFeetype(String feetype) {
		this.feetype = feetype;
	}
	
	@Length(min=0, max=128, message="现金支付金额,订单现金支付金额长度必须介于 0 和 128 之间")
	public String getCashfee() {
		return cashfee;
	}

	public void setCashfee(String cashfee) {
		this.cashfee = cashfee;
	}
	
	@Length(min=0, max=128, message="现金支付货币类型,符合ISO4217标准的三位字母代码，默认人民币：CNY长度必须介于 0 和 128 之间")
	public String getCashfeetype() {
		return cashfeetype;
	}

	public void setCashfeetype(String cashfeetype) {
		this.cashfeetype = cashfeetype;
	}
	
	@Length(min=0, max=128, message="代金券或立减优惠金额, 代金券或立减优惠金额&lt;=订单总金额，订单总金额-代金券或立减优惠金额=现金支付金额长度必须介于 0 和 128 之间")
	public String getCouponfee() {
		return couponfee;
	}

	public void setCouponfee(String couponfee) {
		this.couponfee = couponfee;
	}
	
	@Length(min=0, max=128, message="代金券或立减优惠使用数量长度必须介于 0 和 128 之间")
	public String getCouponcount() {
		return couponcount;
	}

	public void setCouponcount(String couponcount) {
		this.couponcount = couponcount;
	}
	
	@Length(min=0, max=128, message="微信支付订单号长度必须介于 0 和 128 之间")
	public String getTradeno() {
		return tradeno;
	}

	public void setTradeno(String tradeno) {
		this.tradeno = tradeno;
	}
	
	@Length(min=0, max=128, message="商家数据包，原样返回长度必须介于 0 和 128 之间")
	public String getAttach() {
		return attach;
	}

	public void setAttach(String attach) {
		this.attach = attach;
	}
	
	@Length(min=0, max=128, message="支付完成时间，格式为yyyyMMddHHmmss长度必须介于 0 和 128 之间")
	public String getTimeend() {
		return timeend;
	}

	public void setTimeend(String timeend) {
		this.timeend = timeend;
	}
	
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	public Date getCreatetime() {
		return createtime;
	}

	public void setCreatetime(Date createtime) {
		this.createtime = createtime;
	}
	
	@Length(min=0, max=128, message="支付渠道号长度必须介于 0 和 128 之间")
	public String getBizsystemcode() {
		return bizsystemcode;
	}

	public void setBizsystemcode(String bizsystemcode) {
		this.bizsystemcode = bizsystemcode;
	}
	
}